package ecom.entity;

import java.io.Serializable;
//import java.util.Collection;
import java.util.Collection;
import java.util.Date;
import java.util.List;

import javax.persistence.*;
//import org.apache.log4j.Logger;
//import org.apache.log4j.BasicConfigurator;

@Entity
public class ChercheurEntity implements Serializable {

    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	// Utilisation de log4j : def d'une instance du logger
    //private static final Logger log = Logger.getLogger(ChercheurEntity.class.getName());
    //BasicConfigurator.configure();
    @Id
    @Column(name = "Chercheur_ID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    @OneToOne(cascade = {CascadeType.PERSIST, CascadeType.REMOVE,
        CascadeType.REFRESH})
    private UtilisateurEntity myUtilisateur;
    // private long idUtilisateur;// lien avec l'utilisateur dans la BD
    // manque @OnetoMany
    // de Alexandra: je pense qu'il faut mettre aussi en AnnonceChercheurEntity,
    // AnnonceChercheurEntity un champ ChercheurEntity pour qu'il fasse bien
    // les tables en BD
    // sinon: il ne sait pas quoi faire avec cette colonne A REVOIR!!!!!
    // --> le champ y est
    // Caused by: org.hibernate.MappingException: Could not determine type for:
    // java.ut
    // il.Collection, at table: ChercheurEntity, for columns:
    // [org.hibernate.mapping.Co
    // lumn(mesAnnonces)]
//    @OneToMany //(mappedBy = "chercheurEntityAC")//mappedBy : utiliser clef etrangere; or ici elle a le meme nom qu'un champ ...
	@OneToMany(mappedBy = "chercheurEntityAC")//mappedBy : utiliser clef etrangere
	// (mappedBy = "chercheurEntityAC")//mappedBy : utiliser clef etrangere
    private Collection<AnnonceChercheurEntity> mesAnnonces; // marche ?
    
    @ManyToMany
    @JoinTable(name = "Chercheur_AnnoncePropietaire", 
    joinColumns =@JoinColumn(name = "CI_Chercheur_ID", referencedColumnName = "Chercheur_ID"),
            inverseJoinColumns =@JoinColumn(name = "CI_AnnoncePropietaire_ID", referencedColumnName = "AnnoncePropietaire_ID"))
    private List<AnnonceProprietaireEntity> mesFavoris;

    // ou creer PersistenceUnit avec Netbeans
    public ChercheurEntity() {
        this.myUtilisateur = new UtilisateurEntity();
        //log.info("Creation d'un nouveau ChercheurEntity");

    }
    
    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    // public long getIdUtilisateur() {
    // return idUtilisateur;
    // }
    //
    // public void setIdUtilisateur(long idUtilisateur) {
    // this.idUtilisateur = idUtilisateur;
    // }
    public void addAnnonce(AnnonceChercheurEntity annonce) {
        mesAnnonces.add(annonce);
    }

    public Collection<AnnonceChercheurEntity> getMesAnnonces() {
        return mesAnnonces;
    }

    public void setMesAnnonces(List<AnnonceChercheurEntity> mesAnnonces) {
        this.mesAnnonces = mesAnnonces;
    }

    public List<AnnonceProprietaireEntity> getMesFavoris() {
        return mesFavoris;
    }

    public void setMesFavoris(List<AnnonceProprietaireEntity> mesFavoris) {
        this.mesFavoris = mesFavoris;
    }

    public UtilisateurEntity getMyUtilisateur() {
        return myUtilisateur;
    }

    // getters des classes superieures
    public void setMyUtilisateur(UtilisateurEntity myUtilisateur) {
        this.myUtilisateur = myUtilisateur;
    }

    public long getUtilisateurId() {
        return myUtilisateur.getId();
    }

    public String getVille() {
        return myUtilisateur.getVille();
    }

    public void setVille(String v) {
        myUtilisateur.setVille(v);
    }

    public int getDepartement() {
        return myUtilisateur.getDepartement();
    }

    public void setDepartement(int d) {
        myUtilisateur.setDepartement(d);
    }

    public Date getDateNaissance() {
        return myUtilisateur.getDateNaissance();
    }

    public void setDateNaissance(Date d) {
        myUtilisateur.setDateNaissance(d);
    }

    // getters de Compte
    public String getNom() {
        return myUtilisateur.getNom();
    }

    public void setNom(String n) {
        myUtilisateur.setNom(n);
    }

    public String getPrenom() {
        return myUtilisateur.getPrenom();
    }

    public void setPrenom(String p) {
        myUtilisateur.setPrenom(p);
    }

    public String getPseudo() {
        return myUtilisateur.getPseudo();
    }

    public void setPseudo(String p) {
        myUtilisateur.setPseudo(p);
    }

    public String getMail() {
        return myUtilisateur.getMail();
    }

    public void setMail(String m) {
        myUtilisateur.setMail(m);
    }

    public int getNumTel() {
        return myUtilisateur.getNumTel();
    }

    public void setNumTel(int n) {
        myUtilisateur.setNumTel(n);
    }

    public void setMdp(String mdp) {
        myUtilisateur.getMyCompteEntity().setMdp(mdp);
    }

    public void setRole(String role) {
        myUtilisateur.setRole(role);
    }

    public String getRole() {
        return myUtilisateur.getRole();
    }

    public void printAnnonces() {
        System.out.println("Annonces du chercheur pseudo " + this.getPseudo());
        mesAnnonces.toString();
    }
}
